const express = require('express');
const mongoose = require('mongoose')
const app = express();
// 如何让服务器和数据库建立联系
// mongoose是一个对象文档模型库
// mongoose将服务器和数据库连接起来
/* mongoose.connect('mongodb://localhost:27017/mongoose_2203',{useNewUrlParser:true,useUnifiedTopology:true});
mongoose.connection.once('open',err=>{
    if(err){
        console.log(err);
    }else{
        console.log('数据库连接成功！！');
    }
}) */

const promise = new Promise((resolve,reject)=>{
    mongoose.connect('mongodb://localhost:27017/mongoose_2203',{useNewUrlParser:true,useUnifiedTopology:true});
    mongoose.connection.once('open',err=>{
        if(err){
            console.log(err);
            reject(err);
        }else{
            console.log('数据库连接成功！！');
            resolve();
        }
    })
})
// new promise()()() 
// 匿名函数自己调用  IIFE 立即执行函数
// 当服务器和数据库必须先连上 才能进行数据库的增删改查

;(async()=>{
    // 数据库和服务器建立连接
    await promise;
    // 写服务器的增删改查
    // mongoose提供了三个核心对象 Schema模式对象  通过schema可以对集合进行约束
    // model 模型对象  相当于数据库中的集合  通过这个对象咱们就能对集合进行操作
    // document 文档对象 通过文档对象可以对数据库当中的信息进行怎删改查这些操作
    
    //创建约束对象Schema
    const Schema = mongoose.Schema;
    // 创建约束对象
    // 常见的数据类型有哪些：String、number、Date、Boolean、Array、Object、Mixed(任意类型)
    const studentsSchema = new Schema({
        studentId:{
            // type指的你要输入的数据的数据类型
            type:String,
            // 是否唯一  true是唯一的   false不是唯一
            unique:true,
            // 是否是必须的 如果 true 是必须的  false不是必须的
            required:true
        },
        name:{
            type:String,
            unique:false,
            required:true
        },
        age:{
            type:Number,
            unique:false,
            required:true
        },
        sex:{
            type:String,
            unique:false,
            required:true,
            default:'男'
        },
        /* hobby:{
            type:String,
        } */
        // 简写为这种格式
        hobby:String,
        createTime:{
            type:Date,
            default:Date.now //默认值
        },
        info:Schema.Types.Mixed //任意数据类型
    }) 

    // 创建模型对象
    const Students = mongoose.model('students',studentsSchema);
    // 创建文档
    const student1 = new Students({
        studentId:'01',
        name:'jack',
        age:10,
        sex:'男',
        hobby:'性别男爱好女',
        info:'活泼开朗，团建合作'
    })
    // 把数据保存到数据库当中
    student1.save(err=>{
        if(!err){
            console.log('数据保存成功！！');
        }else{
            console.log(err);
        }
    })
})()

app.listen(3000,err=>{
    if(!err) console.log('服务器启动成功！！');
    else console.log(err);
})


